/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Simulacion.Controlador;

import com.dp1.pucp.Administracion.DAO.RRHHDAO;
import com.dp1.pucp.Modelo.Algoritmos.EmpleadoAlgoritmo;
import com.dp1.pucp.Modelo.Algoritmos.Solucion;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Simulacion.DAO.SimulacionDAO;
import com.dp1.pucp.Simulacion.VIsta.ResAsignacionesGUI;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Rodrigo
 */
public class ResultadoAsignacionControlador {
    
    private ResAsignacionesGUI vista;
    private Solucion solucion;
    private SimulacionControlador controladorPrincipal;
    private ArrayList<EmpleadoAlgoritmo> empleadosTurno;
    
    public ResultadoAsignacionControlador(ResAsignacionesGUI vista, Solucion sol,SimulacionControlador controladorPrincipal){
        
        this.vista=vista;
        this.solucion=sol;
        this.controladorPrincipal=controladorPrincipal;
        this.empleadosTurno=this.controladorPrincipal.getEmpleadosxTurno(sol.getTurno());
        this.vista.addCerrarListener(new cerrarListener());
        this.llenarTabla();
        this.vista.setTurno(sol.getTurno());
        
    }
    
    public void LimpiarDatos(){    
        ((DefaultTableModel) vista.getTabla().getModel()).setRowCount(0); 
    }
    
    private int estaAsignado(EmpleadoAlgoritmo empleado, ArrayList<EmpleadoAlgoritmo> asignados){
        int bandera=0;
        for (int i=0; i<asignados.size();i++){
            if (asignados.get(i).getIdempleado()==empleado.getIdempleado()){
                bandera=1;
                break;
            }           
        }
        return bandera;
    }
    
    
    private ArrayList<EmpleadoAlgoritmo> noAsignados(ArrayList<EmpleadoAlgoritmo> asignados){
        ArrayList<EmpleadoAlgoritmo> respuesta = new ArrayList<EmpleadoAlgoritmo>();
        for (int i=0; i<empleadosTurno.size();i++){
            if (estaAsignado(empleadosTurno.get(i),asignados)==0){
                respuesta.add(empleadosTurno.get(i));
            }
        }
        return respuesta;       
    } 
       
    private void llenarTabla(){
        SimulacionDAO dao = new SimulacionDAO();
        RRHHDAO daor = new RRHHDAO();
        ArrayList<Empleado> empleados = daor.listarEmpleado();
        ArrayList<EmpleadoAlgoritmo> arreglo=solucion.getAsignados();
        ArrayList<EmpleadoAlgoritmo> arregloNoAsignados=noAsignados(solucion.getAsignados());
        ((DefaultTableModel) vista.getTabla().getModel()).setRowCount(0);
        Empleado emp;
        int i;
        for (i=0;i<arreglo.size();i++){
            ((DefaultTableModel) vista.getTabla().getModel()).setRowCount(vista.getTabla().getRowCount()+1);
            emp= dao.buscarEmpleadoConArreglo(arreglo.get(i).getIdempleado(), empleados);
            String nombre = emp.getNombre()+" "+emp.getApPaterno()+" "+emp.getApMaterno();
            vista.getTabla().setValueAt(nombre,i,0);         
            int tipoproducto=arreglo.get(i).getGalletaAsignada().getTipogalleta().getIdTipo();
            String nombreGalleta=new String();
            if (tipoproducto==1) nombreGalleta="Galleta Soda";
            System.out.println("IMPRIMO "+tipoproducto);
            if (tipoproducto==2) nombreGalleta="Galleta Decorada";
            if (tipoproducto==3) nombreGalleta="Galleta Rellena";
            vista.getTabla().setValueAt(nombreGalleta,i,1);
            int tipomaquina = arreglo.get(i).getTipoMaquinaAsignada();
            String nombreTipo=new String();
            if (tipomaquina==1) nombreTipo="Horneado";
            if (tipomaquina==2) nombreTipo="Decorado";
            if (tipomaquina==3) nombreTipo="Rellenado";
            if (tipomaquina==4) nombreTipo="Empaquetado";
            vista.getTabla().setValueAt(nombreTipo,i,2);
            vista.getTabla().setValueAt(arreglo.get(i).getProduccion()[tipomaquina-1],i,3);
            vista.getTabla().setValueAt(arreglo.get(i).getMermas()[tipomaquina-1],i,4);       
        }
        System.out.println("TOTAL :"+empleadosTurno.size()+" Asignados: "+arreglo.size()+" NoAsignados"+arregloNoAsignados.size());
        ((DefaultTableModel) vista.getTabla2().getModel()).setRowCount(0);
        for (int j=0; j<arregloNoAsignados.size();j++){
            ((DefaultTableModel) vista.getTabla2().getModel()).setRowCount(vista.getTabla2().getRowCount()+1);
            emp= dao.buscarEmpleadoConArreglo(arregloNoAsignados.get(j).getIdempleado(), empleados);
            String nombre = emp.getNombre()+" "+emp.getApPaterno()+" "+emp.getApMaterno();
            vista.getTabla2().setValueAt(nombre,j,0);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getProduccion()[0], j, 1);  
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getMermas()[0], j, 2);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getProduccion()[1], j, 3);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getMermas()[1], j, 4);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getProduccion()[2], j, 5);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getMermas()[2], j, 6);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getProduccion()[3], j, 7);
            vista.getTabla2().setValueAt(arregloNoAsignados.get(j).getMermas()[3], j, 8);
        }
    }
    
    

    
    
    
    class cerrarListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            
            vista.dispose();
            
        }
        
    }
    
}
